package lk;

import java.util.*;

public class D230922 {
    // 独一无二的出现次数
    public boolean uniqueOccurrences(int[] arr) {
        // 遍历数组, 使用哈希表统计每个数字的出现次数
        Map<Integer, Integer> map = new HashMap<>();
        for (int x : arr) {
            map.put(x, map.getOrDefault(x, 0) + 1);
        }

        // 遍历哈希表, 使用 set 查看数字出现的次数是否不同
        Set<Integer> times = new HashSet<>();
        for (Map.Entry<Integer, Integer> x : map.entrySet()) {
            times.add(x.getValue());
        }

        return times.size() == map.size();
    }


    // 找出两数组的不同
    public List<List<Integer>> findDifference(int[] nums1, int[] nums2) {
        List<List<Integer>> answer = new ArrayList<>();
        Set<Integer> list1 = new HashSet<>();
        Set<Integer> list2 = new HashSet<>();
        Set<Integer> set1 = new HashSet<Integer>();
        Set<Integer> set2 = new HashSet<Integer>();
        for (int x : nums1) {
            set1.add(x);
        }
        for (int x : nums2) {
            if (!set1.contains(x)) {
                list2.add(x);
            }
            set2.add(x);
        }
        for (int x : nums1) {
            if (!set2.contains(x)) {
                list1.add(x);
            }
        }
        answer.add(new ArrayList<>(list1));
        answer.add(new ArrayList<>(list2));
        return answer;
    }

    public List<List<Integer>> findDifference2(int[] nums1, int[] nums2) {
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();
        for (int i : nums1) {
            set1.add(i);
        }
        for (int i : nums2) {
            set2.add(i);
        }
        for (int num : nums1) {
            if (set1.contains(num) && set2.contains(num)) {
                set1.remove(num);
                set2.remove(num);
            }
        }
        List<List<Integer>> res = new ArrayList<>();
        res.add(new ArrayList<>(set1));
        res.add(new ArrayList<>(set2));
        return res;
    }
}
